//    CANAPE Network Testing Tool
//    Copyright (C) 2014 Context Information Security
//
//    This program is free software: you can redistribute it and/or modify
//    it under the terms of the GNU General Public License as published by
//    the Free Software Foundation, either version 3 of the License, or
//    (at your option) any later version.
//
//    This program is distributed in the hope that it will be useful,
//    but WITHOUT ANY WARRANTY; without even the implied warranty of
//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//    GNU General Public License for more details.
//
//    You should have received a copy of the GNU General Public License
//    along with this program.  If not, see <http://www.gnu.org/licenses/>.

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using CANAPE.Controls;
using CANAPE.Nodes;
using CANAPE.Utils;

namespace CANAPE.Forms
{
    internal partial class PacketDiffLogViewerForm : Form
    {
        int _index;
        IList<LogPacket> _packets;                

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            bool ret = true;

            switch(keyData)
            {
                case Keys.Control | Keys.N:
                    toolStripButtonForward.PerformClick();
                    break;
                case Keys.Control | Keys.P:
                    toolStripButtonBack.PerformClick();
                    break;                                    
                default:
                    ret = base.ProcessCmdKey(ref msg, keyData);
                    break;
            }

            return ret;
        }

        public PacketDiffLogViewerForm(LogPacket curr, IList<LogPacket> packets)
        {
            for (int i = 0; i < packets.Count; i++)
            {
                if (packets[i] == curr)
                {
                    _index = i;
                    break;
                }
            }
            
            _packets = packets;
            //_modifiedPackets = new PacketEntry[_packets.Count];
            //_newStyleLogViewer = GlobalControlConfig.NewStyleLogViewer;

            
            InitializeComponent();
        }

        private LogPacket GetCurrentPacket()
        {
            if (_packets.Count == 0)
            {
                return null;
            }

            return _packets[_index];            
        }


        private void UpdatePacketDisplay()
        {
            LogPacket p = GetCurrentPacket();

            if (p == null)
            {
                return;
            }
            
            toolStripLabelPosition.Text = String.Format(CANAPE.Properties.Resources.PacketLogViewerForm_Header, _index + 1, 
                _packets.Count, p.Tag, p.Network, p.Timestamp.ToString());
        }

        private void LogViewerForm_Load(object sender, EventArgs e)
        {
            if(_packets.Count == 0)
            {
                Close();
            }

            UpdatePacketDisplay();
        }

        private void toolStripButtonBack_Click(object sender, EventArgs e)
        {           
            _index -= 1;
            if (_index < 0)
            {
                _index = _packets.Count - 1;
            }

            UpdatePacketDisplay();
        }

        private void toolStripButtonForward_Click(object sender, EventArgs e)
        {           
            _index++;

            if (_index > _packets.Count - 1)
            {
                _index = 0;
            }

            UpdatePacketDisplay();
        }
  
    }
}
